
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/showRequest")
public class ShowRequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //调用一下刚才涉及到的几个关键 API，并且把得到的结果组织到一个 html 中，并作为是一个响应的body

        //把 api 执行的结果，往这个 StringBuild 中 塞。

        // 首行部分
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(req.getProtocol());// 获取 协议版本
        stringBuilder.append("<br>");// 换行
        stringBuilder.append(req.getMethod());// 获取 请求方法可续
        stringBuilder.append("<br>");// 换行
        stringBuilder.append(req.getRequestURI());// 获取 请求路径
        stringBuilder.append("<br>");// 换行
        stringBuilder.append(req.getContextPath());//获取请求的第一级路径。
        stringBuilder.append("<br>");// 换行
        stringBuilder.append(req.getQueryString());// 获取 完整 的 查询字符串
        stringBuilder.append("<br>");// 换行

        stringBuilder.append("<h3>header 部分</h3>");
        Enumeration<String> headerNames = req.getHeaderNames();//获取报头中的所有的key值
        // 使用迭代器方式来遍历 获取到 header中的key值 们。
        while(headerNames.hasMoreElements()){
            // 获取到 headerNames 中的一个 key 元素
            String headerName = headerNames.nextElement();
            // 通过 header 中的key值，获取到对应的 value 值
            String headerValue = req.getHeader(headerName);
            // 将其 key 和 value 组织成 键值对，放入 StringBuilder 中
            stringBuilder.append(headerName + ": " + headerValue + "<br>");
        }
        //在展示结果之前，我们需要指定浏览器的读取的编码方式，防止乱码。
        resp.setContentType("text/html; charset=utf8");
        resp.getWriter().write(stringBuilder.toString());
    }
}
